package com.springsummer.information.green.beans;

import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class MutableConstructorArgValues {

    private final Map<Integer, ConstructorArgValue> indexedArgumentValues = new LinkedHashMap<>();
    private final List<ConstructorArgValue> genericArgumentValues = new LinkedList<>();

    public MutableConstructorArgValues() {
    }

    public void addArgumentValue(Integer key, ConstructorArgValue newValue) {
        this.indexedArgumentValues.put(key, newValue);
    }

    public boolean hasIndexedArgumentValue(int index) {
        return this.indexedArgumentValues.containsKey(index);
    }

    public ConstructorArgValue getIndexedArgumentValue(int index) {
        return this.indexedArgumentValues.get(index);
    }

    public void addGenericArgumentValue(Object value, String type) {
        this.genericArgumentValues.add(new ConstructorArgValue(type,"",value, false));
    }

    public void addGenericArgumentValue(ConstructorArgValue newValue) {
        this.genericArgumentValues.add(newValue);
    }

    public ConstructorArgValue getGenericArgumentValue(String requiredName) {
        for (ConstructorArgValue valueHolder : this.genericArgumentValues) {
            if(requiredName==null||valueHolder.getName()==null){
                continue;
            }

            if (valueHolder.getName().equals(requiredName))
            {
                return valueHolder;
            }

        }
        return null;
    }



    public int getArgumentCount() {
        return (this.indexedArgumentValues.size() + this.genericArgumentValues.size());
    }


    public boolean isEmpty() {
        return (this.indexedArgumentValues.isEmpty() && this.genericArgumentValues.isEmpty());
    }


    public void clear() {
        this.indexedArgumentValues.clear();
        this.genericArgumentValues.clear();
    }

}


